package com.tjetc.service.impl;

import com.tjetc.entity.Users;
import com.tjetc.dao.UsersDao;
import com.tjetc.service.UsersService;
import com.tjetc.util.Pager;
import com.tjetc.util.R;

import org.apache.ibatis.annotations.SelectKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.query.Param;

import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.tjetc.util.R.ok;

/**
 * 前台用户表(Users)表服务实现类
 *
 * @author makejava
 * @since 2025-09-13 16:06:08
 */
@Service("usersService")
public class UsersServiceImpl implements UsersService {
    @Resource
    private UsersDao usersDao;

    /**
     * 通过ID查询单条数据
     *
     * @param uid 主键
     * @return 实例对象
     */
    @Override
    public Users queryById(Long uid) {
        return this.usersDao.queryById(uid);
    }

    @Override
    public  R login(@Param("uaccount") String username , @Param("upwd") String password) {
        //根据用户名和密码查询Admin
        Users user=usersDao.selectByUsernameAndPassword(username,password);
        if (user==null){
            return R.fail(505,"用户名或者密码错误");
        }else {
            //用户名或者密码正确,生成token
//            Map<String,Object> claims=new HashMap<>();
//            claims.put("adminId",admin.getAdminId());
//            String token=JwtTokenUtil.generateToken(claims,"admin",tokeExpiraton);
            return R.ok(user);
        }
    }

    // 调用时只需传其中一个参数（另一个传 null）
    @Override
    public Object selectPageLikeUaccount(Integer pageNum,Integer pageSize, String uaccount,Integer utel) {
        //查询总记录数
        Integer recordCount = usersDao.countP();

        //构建分页信息对象
        Pager pager = new Pager(pageNum, pageSize, recordCount);
        //根据pager查询需要的数据
        List<Users> list = usersDao.selectPageLikeUaccount(pager.getStart(), pageSize,uaccount,utel);
        //将分页信息和查询到的数据一起返回到前端
        HashMap<String,Object> map = new HashMap<>();
        map.put("pager",pager);
        map.put("list",list);
        return map;
    }

    /**
     * 分页查询
     *
     * @param users 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    @Override
    public Page<Users> queryByPage(Users users, PageRequest pageRequest) {
        long total = this.usersDao.count(users);
        return new PageImpl<>(this.usersDao.queryAllByLimit(users, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param users 实例对象
     * @return 实例对象
     */
    @Override
    public R insert(Users users) {
        Users users1=usersDao.queryByUname(users.getUaccount());
        if (users1!=null){
            return R.fail(203,"注册失败，用户名已存在");
        }
        Date currentTime = new Date(); // new Date() 即表示当前系统时间
        users.setUregtime(currentTime);
        this.usersDao.insert(users);
        return R.ok(users);
    }

    /**
     * 修改数据
     *
     * @param users 实例对象
     * @return 实例对象
     */
    @Override
    public Users update(Users users) {
        this.usersDao.update(users);
        return this.queryById(users.getUid());
    }

    /**
     * 通过主键删除数据
     *
     * @param uid 主键
     * @return 是否成功
     */
    @Override
    public R deleteById(Long uid) {
         usersDao.deleteById(uid);
         return ok();
    }

    public Object Page(Integer pageNum, Integer pageSize){

        //查询总记录数
        Integer recordCount = usersDao.countP();

        //构建分页信息对象
        Pager pager = new Pager(pageNum, pageSize, recordCount);
        //根据pager查询需要的数据
        List<Users> list = usersDao.query(pager.getStart(), pageSize);
        //将分页信息和查询到的数据一起返回到前端
        HashMap<String,Object> map = new HashMap<>();
        map.put("pager",pager);
        map.put("list",list);
        return map;
    }
}
